package cn.tedu.bece.admin.common.util;

import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
import cn.tedu.bece.admin.common.constant.StatusCode;
import cn.tedu.bece.admin.common.exception.ServiceException;

public class SecurityUtils {

    /**
     * 获取用户ID
     *
     * @return 用户ID
     */
    public static Long getUserId() {
        try {
            return StpUtil.getLoginIdAsLong();
        } catch (Exception e) {
            throw new ServiceException(StatusCode.UNAUTHORIZED, "获取用户ID异常");
        }
    }

    /**
     * 获取用户名
     *
     * @return 用户名
     */
    public static String getUsername() {
        try {
            return StpUtil.getSession().getString("username");
        } catch (Exception e) {
            throw new ServiceException(StatusCode.UNAUTHORIZED, "获取用户名异常");
        }
    }

    /**
     * 生成BCrypt密码
     *
     * @param password 明文密码
     * @return BCrypt密码
     */
    public static String encryptPassword(String password) {
        return BCrypt.hashpw(password, BCrypt.gensalt());
    }

    /**
     * 匹配BCrypt密码
     *
     * @param rawPassword     原始密码
     * @param encodedPassword 加密密码
     * @return 是否匹配
     */
    public static boolean matchesPassword(String rawPassword, String encodedPassword) {
        return BCrypt.checkpw(rawPassword, encodedPassword);
    }

}
